package com.jiuyou.storeController.storeUserAccount;

import com.jiuyou.storeController.common.StoreBaseController;
import com.ruoyi.common.constant.DicConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.StoreUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.core.domain.entity.StoreUserRole;
import com.ruoyi.store.service.IStoreUserRoleService;
import com.ruoyi.storeUser.service.IStoreUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;


/**
 * 门店账号管理
 */
@RestController
@RequestMapping("/store/storeUserAccount")
public class StoreUserAccountStoreController extends StoreBaseController {

    @Autowired
    private IStoreUserRoleService roleService;
    @Autowired
    private IStoreUserService storeUserService;



    /**
     * 列出当前门店的所有账号
     * @return
     */
    @PostMapping("/list")
    public AjaxResult list()
    {
        StoreUserRole role = getStoreUserRole();
        Long storeId= role.getStoreId();
        StoreUserRole storeUserRoleQuery=new StoreUserRole();
        storeUserRoleQuery.setStoreId(storeId);
        storeUserRoleQuery.getParams().put("roleTypeueq",DicConstants.STORE_Identity_Manager.getCode());
        //当前一个用户只有一个角色，后面有多个角色后需要修改
        //角色用户表
        List<StoreUserRole> storeUserRoles= roleService.selectStoreUserRoleList(storeUserRoleQuery);

        List<StoreUser> listStoreUser=new ArrayList<StoreUser>();
        for (StoreUserRole storeUserRole:storeUserRoles) {
            //用户id
            StoreUser storeUser=new StoreUser();
            Long storeUserId=storeUserRole.getStoreUserId();
            List<StoreUserRole> storeRoles=new ArrayList<>();
            storeRoles.add(storeUserRole);
            storeUser.setStoreUserRoles(storeRoles);
            storeUser.setUserName(storeUserRole.getUserName());
            storeUser.setPhone(storeUserRole.getPhone());
            if(null==storeUserId){
                //尚未关联
            }else{
               // StoreUser storeUserq= storeUserService.selectStoreUserById(storeUserId);
                //已关联
                storeUser.setId(storeUserId);
            }
            listStoreUser.add(storeUser);
        }
        TableDataInfo tableDataInfo =getDataTable(listStoreUser);
        return AjaxResult.success(tableDataInfo);
    }
    /**
     * 获取账号
     * @param uuid
     * @return
     */
    @PostMapping("/getAcount")
    public AjaxResult getAcount(String uuid){
        StoreUserRole role = getStoreUserRole();
        Long storeId= role.getStoreId();
        StoreUserRole storeUserRoleQuery=new StoreUserRole();
        storeUserRoleQuery.setStoreId(storeId);
        storeUserRoleQuery.setUuid(uuid);
        storeUserRoleQuery.getParams().put("roleTypeueq",DicConstants.STORE_Identity_Manager.getCode());
        //当前一个用户只有一个角色，后面有多个角色后需要修改
        //角色用户表
        List<StoreUserRole> storeUserRoles= roleService.selectStoreUserRoleList(storeUserRoleQuery);
        StoreUserRole storeUserRole=storeUserRoles.get(0);
        StoreUser storeUser=new StoreUser();
        Long storeUserId=storeUserRole.getStoreUserId();
        List<StoreUserRole> storeRoles=new ArrayList<>();
        storeRoles.add(storeUserRole);
        storeUser.setStoreUserRoles(storeRoles);
        storeUser.setUserName(storeUserRole.getUserName());
        storeUser.setPhone(storeUserRole.getPhone());
        if(null==storeUserId){
            //尚未关联
        }else{
           // StoreUser storeUserq= storeUserService.selectStoreUserById(storeUserId);
            //已关联
            storeUser.setId(storeUserId);
        }
        return AjaxResult.success(storeUser);
    }
    /**
     * 删除账号
     * @param uuid
     * @return
     */
    @PostMapping("/delAcount")
    public AjaxResult delAcount(String uuid){

        if(StringUtils.isEmpty(uuid)){
            return AjaxResult.error("删除失败");
        }
        StoreUserRole role = getStoreUserRole();
        Long storeId= role.getStoreId();
        StoreUserRole storeUserRoleQuery=new StoreUserRole();
        storeUserRoleQuery.setUuid(uuid);
        boolean canDel=true;
        List<StoreUserRole> storeUserRoles= roleService.selectStoreUserRoleList(storeUserRoleQuery);
        for (StoreUserRole storeUserRole:storeUserRoles) {
            if(storeUserRole.getStoreId()!=storeId){
                canDel=false;
            }
        }
        if(canDel){
            roleService.deleteStoreUserRoleByUuid(uuid);
            return AjaxResult.success();
        }
       return AjaxResult.error("删除失败");
    }
    /**
     * 添加修改账号
     * @param uuid 一组权限的唯一标识，可以理解为一个user在某个门店下权限唯一标识
     * @param userName
     * @param phone
     * @param rolesStr 角色字符串
     * @return
     */
    @PostMapping("/editAcount")
    public AjaxResult editAcount(String uuid,String userName,String phone,String rolesStr){
        StoreUserRole role = getStoreUserRole();
        Long storeId= role.getStoreId();
        Long storeUserid=null;
        if(!StringUtils.isEmpty(phone)){
            StoreUser storeUsers=new StoreUser();
            storeUsers.setPhone(phone);
            List<StoreUser> list=storeUserService.selectStoreUserList(storeUsers);
            if(list.size()>0){
                storeUserid=  list.get(0).getId();
            }
        }else{
            return AjaxResult.error("手机号必填");
        }
        if(!StringUtils.isEmpty(uuid)){
            StoreUserRole storeUserRoleS1=new StoreUserRole();
            storeUserRoleS1.setUuid(uuid);
            storeUserRoleS1.setStoreId(storeId);
            List<StoreUserRole> listC1=  roleService.selectStoreUserRoleList(storeUserRoleS1);
            if(listC1.size()>0){
                if(null==storeUserid){
                    //手机号能查到用户则每次取最新的，保证更换手机号之后更新权限
                    storeUserid=listC1.get(0).getStoreUserId();
                }
            }else{
                //该门店下没这个账号
                return AjaxResult.unAuthorize();
            }
            //修改 先删除后新增
            //同门店下非uuid有phone，说明手机号冲突
            StoreUserRole storeUserRoleS=new StoreUserRole();
            storeUserRoleS.setStoreId(storeId);
            storeUserRoleS.setPhone(phone);
            storeUserRoleS.setRoleType(DicConstants.STORE_Identity_YunYing.getCode());
            storeUserRoleS.getParams().put("uuidueq",uuid);
            List listC=  roleService.selectStoreUserRoleList(storeUserRoleS);
            if(listC.size()>0){
                return AjaxResult.error("手机号"+phone+"已存在");
            }
            //手机号不冲突可以继续操作
            //根据删除uuid删除然后重新新增
            roleService.deleteStoreUserRoleByUuid(uuid);
        }else{
            //新增生成新的uuid
            uuid= IdUtils.fastUUID();
            //校验手机号是否已存在
            StoreUserRole storeUserRoleS=new StoreUserRole();
            storeUserRoleS.setStoreId(storeId);
            storeUserRoleS.setRoleType(DicConstants.STORE_Identity_YunYing.getCode());
            storeUserRoleS.setPhone(phone);
            List listC=  roleService.selectStoreUserRoleList(storeUserRoleS);
            if(listC.size()>0){
                return AjaxResult.error("手机号"+phone+"已存在");
            }

        }
        StoreUserRole storeUserRole=new StoreUserRole();
        storeUserRole.setStoreId(storeId);
        storeUserRole.setUserName(userName);
        storeUserRole.setPhone(phone);
        storeUserRole.setUuid(uuid);
        storeUserRole.setStoreUserId(storeUserid);
        storeUserRole.setRoleType(DicConstants.STORE_Identity_YunYing.getCode());
        roleService.insertStoreUserRole(storeUserRole);
        return AjaxResult.success();
    }


}

